<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>

      /*   ES6继承本质是为了实现上游构造器原型方法和属性的合法传递
            在子类构造体内，可以通过设定的super关键字表示父类对象，用于调用父类的属性和方法
            es6的super关键字的设定主要是为了实现下面两种要求和特性
                1.贴合现有的面向对象的语法体系
                2.让代码的可读性增强 */
        class Person{
            info="测试属性";
            test=null;
            constructor(test){
                this.test=test;
            }
            play(){
                console.log("正在玩游戏");
            }

        }

        class Man extends Person{
            msg="子测试属性";
            //当子类自定义构造器时候，必须在第一行明确完成父类构造器调用，实现父类的实例构建
            // super关键字也是一个特殊执行函数，用于在子类构造器中完成父类构造器的使用
            constructor(hello){
                super(hello);
                this.hello=hello;
            }
            eat(){
                console.log("正在吃饭");
            }
            playAndEat(){
                this.eat();
                // this.play();
                super.play();
            }
        }
        let p=new Person("aaa");
        console.log(p);

        let m=new Man("父类test的默认值");
        console.log(m);
        // m.play();
        // m.playAndEat();
    </script>
</head>
<body>
    
</body>
</html>